home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_threadedtempfile.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  3KB  |  94 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. """
  5. Create and delete FILES_PER_THREAD temp files (via tempfile.TemporaryFile)
  6. in each of NUM_THREADS threads, recording the number of successes and
  7. failures.  A failure is a bug in tempfile, and may be due to:
  8.  
  9. + Trying to create more than one tempfile with the same name.
  10. + Trying to delete a tempfile that doesn't still exist.
  11. + Something we've never seen before.
  12.  
  13. By default, NUM_THREADS == 20 and FILES_PER_THREAD == 50.  This is enough to
  14. create about 150 failures per run under Win98SE in 2.0, and runs pretty
  15. quickly. Guido reports needing to boost FILES_PER_THREAD to 500 before
  16. provoking a 2.0 failure under Linux.  Run the test alone to boost either
  17. via cmdline switches:
  18.  
  19. -f  FILES_PER_THREAD (int)
  20. -t  NUM_THREADS (int)
  21. """
  22. NUM_THREADS = 20
  23. FILES_PER_THREAD = 50
  24. import thread
  25. import threading
  26. from test.test_support import TestFailed
  27. import StringIO
  28. from traceback import print_exc
  29. import tempfile
  30. startEvent = threading.Event()
  31.  
  32. class TempFileGreedy(threading.Thread):
  33.     error_count = 0
  34.     ok_count = 0
  35.     
  36.     def run(self):
  37.         self.errors = StringIO.StringIO()
  38.         startEvent.wait()
  39.         for i in range(FILES_PER_THREAD):
  40.             
  41.             try:
  42.                 f = tempfile.TemporaryFile('w+b')
  43.                 f.close()
  44.             except:
  45.                 self.error_count += 1
  46.                 print_exc(file = self.errors)
  47.                 continue
  48.  
  49.             self.ok_count += 1
  50.         
  51.  
  52.  
  53.  
  54. def test_main():
  55.     threads = []
  56.     print 'Creating'
  57.     for i in range(NUM_THREADS):
  58.         t = TempFileGreedy()
  59.         threads.append(t)
  60.         t.start()
  61.     
  62.     print 'Starting'
  63.     startEvent.set()
  64.     print 'Reaping'
  65.     ok = errors = 0
  66.     for t in threads:
  67.         t.join()
  68.         ok += t.ok_count
  69.         errors += t.error_count
  70.         if t.error_count:
  71.             print '%s errors:\n%s' % (t.getName(), t.errors.getvalue())
  72.             continue
  73.     
  74.     msg = 'Done: errors %d ok %d' % (errors, ok)
  75.     print msg
  76.     if errors:
  77.         raise TestFailed(msg)
  78.     
  79.  
  80. if __name__ == '__main__':
  81.     import sys
  82.     import getopt
  83.     (opts, args) = getopt.getopt(sys.argv[1:], 't:f:')
  84.     for o, v in opts:
  85.         if o == '-f':
  86.             FILES_PER_THREAD = int(v)
  87.             continue
  88.         if o == '-t':
  89.             NUM_THREADS = int(v)
  90.             continue
  91.     
  92.     test_main()
  93.  
  94.